package main

import "fmt"

// 抽象产品：文档解析器
type DocumentParser interface {
	Parse(filePath string) []byte
}

// 具体产品1：PDF解析器
type PDFParser struct{}

func (p PDFParser) Parse(path string) []byte {
	// 伪代码：调用PDF解析库
	return []byte("PDF内容")
}

// 具体产品2：Word解析器
type WordParser struct{}

func (w WordParser) Parse(path string) []byte {
	// 伪代码：调用Office API
	return []byte("Word内容")
}

// 抽象工厂接口（仅1个方法）
type ParserFactory interface {
	CreateParser() DocumentParser
}

// 具体工厂1：生产PDF解析器
type PDFFactory struct{}

func (f PDFFactory) CreateParser() DocumentParser {
	return PDFParser{}
}

// 具体工厂2：生产Word解析器
type WordFactory struct{}

func (f WordFactory) CreateParser() DocumentParser {
	return WordParser{}
}

// 客户端调用
func main() {
	var factory ParserFactory = PDFFactory{} // 只需决定产品类型
	parser := factory.CreateParser()
	content := parser.Parse("report.pdf")
	fmt.Println(string(content))
}
